﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using br.com.portocs.unidaacademico.dominio;
using br.com.portocs.unidaacademico.ui.views;

public partial class academico_AlunosCadastro : br.com.portocs.unidaacademico.ui.views.PageView
{
    private Aluno obj;

    private string AreaId = "cadAlunos";
    private string pagAnterior = "Alunos.aspx";

    private string subTituloPaginaAlterar = "Alteração de Cadastro";
    private string subTituloPaginaCriar = "Cadastrando novo item...";
    private string linkMatricularAluno = "Matricular.aspx?acao=criar";
    private string linkNovo = "AlunosCadastro.aspx?acao=criar";
    private string linkListarTodos = "Alunos.aspx";

    private bool voltarAcaoCriar = false; // após ação do usuario, voltar para pag anterior se acao = criar
    private bool voltarAcaoAlterar = false; // após ação do usuario, voltar para pag anterior se acao = Alterar

    //função executada no page load
    private void OutrasFuncoesCarregamento()
    {

        if (recuperarAcaoNaViewState() == "alterar")
        {

        }

        //popular os ddls
        if (!Page.IsPostBack)
        {

        }

    }




    //definir propriedades no formulario ( carregamento da pag ) obj => form
    private void CarregarFormulario()
    {
        tbNome.Text = getObjSessao().Nome;
        tbCpf.Text = getObjSessao().CPF;
        tbRg.Text = getObjSessao().RG;
        tbRgOrgao.Text = getObjSessao().OrgaoRG;
        tbNacionalidade.Text = getObjSessao().Nacionalidade;
        tbNaturalidade.Text = getObjSessao().Naturalidade;
        tbDataNascimento.Text = Utilitarios.retornaDataPadraoBr(getObjSessao().DataNascimento);
        cmbSexo.SelectedValue = getObjSessao().Sexo;
        tbTelefone.Text = getObjSessao().Telefone;
        tbCelular.Text = getObjSessao().Celular;

        //  Endereço
        tbCEP.Text = getObjSessao().Enderecos[0].CEP;
        tbLogradouro.Text = getObjSessao().Enderecos[0].Logradouro;
        tbNumero.Text = getObjSessao().Enderecos[0].Numero;
        tbComplemento.Text = getObjSessao().Enderecos[0].Complemento;
        tbBairro.Text = getObjSessao().Enderecos[0].Bairro;
        tbEnderecoCidade.Text = getObjSessao().Enderecos[0].Cidade;
        cmbUF.SelectedValue = getObjSessao().Enderecos[0].UF;

        tbObservacoes.Text = getObjSessao().Observacoes;        
    }

    //form => obj
    private void setarObjComInformacoesDoFormulario()
    {

        if (recuperarAcaoNaViewState() == "criar")
        {
            //alterar somente o nome da Classe----------------
            this.obj = new Aluno();
            setarObjSessao(obj);
            //---------------------------

            
            getObjSessao().DataCadastro = DateTime.Now;

        }

        getObjSessao().Nome = tbNome.Text;
        getObjSessao().CPF = tbCpf.Text;
        getObjSessao().RG = tbRg.Text;
        getObjSessao().Telefone = tbTelefone.Text;
        getObjSessao().Celular = tbCelular.Text;
        getObjSessao().Observacoes = tbObservacoes.Text;
        getObjSessao().OrgaoRG = tbRgOrgao.Text;
        getObjSessao().Nacionalidade = tbNacionalidade.Text;
        getObjSessao().Naturalidade = tbNaturalidade.Text;
        getObjSessao().Sexo = cmbSexo.SelectedItem.Text;
        getObjSessao().Situacao = SituacaoAluno.Regular;
        getObjSessao().DataNascimento = Utilitarios.retornaDataPadraoEUA(tbDataNascimento.Text);
      
        //  Endereço
        getObjSessao().AdicionaEndereco(new Endereco
        {
            Bairro = tbBairro.Text,
            Cidade = tbEnderecoCidade.Text,
            UF = cmbUF.SelectedItem.Text,
            Complemento = tbComplemento.Text,
            Logradouro = tbLogradouro.Text,
            Numero = tbNumero.Text,
            CEP =  tbCEP.Text,
            Tipo = TipoEndereco.Residencial
        });
        
    }

    //validações. se for para prosseguir com a ação do usuário, retornar true
    private bool formularioValidado()
    {
        bool retorno = true;
        litAviso.Text = string.Empty;

        litAviso.Text = /*"<b>DILTER,</b>*/ "Por favor atente para as informações abaixo:<br /><br />";


        if (tbNome.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe um <b>Nome</b>.<br />";
        }

        if (tbDataNascimento.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe uma <b>Data de Nascimento</b>.<br />";
        }

        if (tbCpf.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe um <b>CPF</b>.<br />";
        }

        if (tbRg.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe um <b>RG</b>.<br />";
        }

        if (tbTelefone.Text.Equals(string.Empty) || tbCelular.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe ao menos um <b>Telefone</b> para contato.<br />";
        }

        //  Endereço
        if (tbCEP.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe um <b>CEP</b>.<br />";
        }

        if (tbLogradouro.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe um <b>Logradouro</b> no Endereço.<br />";
        }

        if (tbNumero.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe um <b>Número</b> no Endereço.<br />";
        }

        if (tbBairro.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Informe um <b>Bairro</b> no Endereço.<br />";
        }

        if (cmbUF.SelectedValue.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Selecione um <b>Estado</b> no Endereco.<br />";

        }

        if (tbEnderecoCidade.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Selecione uma <b>Cidade</b> no Endereco.<br />";

        }

        if (!retorno) litAviso.Text += "<br />*** Nada foi feito.";
        if (retorno) litAviso.Text = "";

        validacao.Visible = !retorno;
        ScriptManager.RegisterStartupScript(Page, GetType(), "ancora",
                                    "<script>window.location.href='#validacao'</script>", false);
        
        return retorno;
    }

    private void FuncoesPosAcaoProfessoreAcaoAlterar()
    {
        exibeInformacao(string.Format("<b>Item alterado com sucesso. </b> <br /><br /> Próxima ação: <a href='{2}'>Matricular Aluno</a> | <a href='{0}'>Novo Aluno</a> | <a href='{1}'>Listar Todos</a>", linkNovo, linkListarTodos, linkMatricularAluno));
    }

    private void FuncoesPosAcaoProfessoreAcaoCriar()
    {
        exibeInformacao(string.Format("<b> Item cadastrado com sucesso. </b> <br /><br /> Próxima ação: <a href='{2}'>Matricular Aluno</a> | <a href='{0}'>Novo Aluno</a> | <a href='{1}'>Listar Todos</a>", linkNovo, linkListarTodos, linkMatricularAluno));
    }

    private void exibeInformacao(string mensagem)
    {
        litInfo.Text = mensagem;
        info.Visible = true;
    }

    #region Não editável

    private long ItemId = 0;


    //retorna objeto
    protected Aluno getObjSessao()
    {
        if (obj == null)
        {
            if (ViewState["ItemObj"] != null)
                obj = (Aluno)ViewState["ItemObj"];
            else
                CarregarObjeto();
        }
        return this.obj;
    }

    protected void setarObjSessao(Aluno objS)
    {
        //ViewState["ItemObj"] = objS;
        obj = objS;
    }

    //setar acao na ViewState
    protected void setarAcaoNaViewState(string acao)
    {
        ViewState["acao"] = acao;

    }
    //recuperar acao na ViewState
    protected string recuperarAcaoNaViewState()
    {
        return ViewState["acao"].ToString();
    }

    //carrega Objeto
    protected void CarregarObjeto()
    {
        if (ItemId > 0)
            this.obj = new br.com.portocs.unidaacademico.repositorio.RepositorioBase<Aluno>().RecuperarPorId(ItemId);
        else
            this.obj = new Aluno();

        setarObjSessao(this.obj);
    }

    //seta a propriedade do Id
    protected void setaIdQueryString()
    {
        if (Request.QueryString["ItemId"].ToString() != null)
            this.ItemId = long.Parse(Request.QueryString["ItemId"].ToString());
        else
            this.ItemId = 0;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        Page.MaintainScrollPositionOnPostBack = false;
        carregaArea(AreaId);

        //vendo o tipo inicial de comportamento em relação a estar criando ou alterando um obj
        if (!Page.IsPostBack)
        {
            if (Request.QueryString["acao"].ToString() != null)
                setarAcaoNaViewState(Request.QueryString["acao"].ToString());
        }

        //if (validacao.Visible)
        if (recuperarAcaoNaViewState() == "alterar")
        {

            setaIdQueryString();

            if (!Page.IsPostBack)
            {

                CarregarObjeto();
                CarregarFormulario();
            }

            litSubtituloAcao.Text = subTituloPaginaAlterar;
        }
        else
        {
            litSubtituloAcao.Text = subTituloPaginaCriar;
        }

        OutrasFuncoesCarregamento();

    }


    //função executava ao clicar em "salvar alterações"
    protected void btCriarSalvar_Click(object sender, EventArgs e)
    {
        if (formularioValidado())
        {
            setarObjComInformacoesDoFormulario();
            Aluno dest = new br.com.portocs.unidaacademico.repositorio.RepositorioBase<Aluno>().SalvarOuAtualizar(getObjSessao());
            setarObjSessao(dest);
            string acao = recuperarAcaoNaViewState();

            if (acao == "criar")
            {
                FuncoesPosAcaoProfessoreAcaoCriar();
                limparObjs();
                
            }

            else if (acao == "alterar")
            {
                FuncoesPosAcaoProfessoreAcaoAlterar();

                if (voltarAcaoAlterar)
                    Response.Redirect(pagAnterior);
            }
        }
    }

    private void limparObjs()
    {
        this.obj = null;
        setarObjSessao(null);

    }


    #endregion



}
